#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

void fn (int i)
{
    // 如果i为0u直接结束程序
    if (i==0)
    {
        // return;
        exit(EXIT_FAILURE);
    }
    
}

// 需求：利用系统调用实现love.txt的一个备份，并在控制台输出文件内容
int main(int argc, char const *argv[])
{

    fn(0);

    // 打开读文件
    int fd = open("love.txt", O_RDONLY);
    if (fd == -1)
    {
        perror("打开读文件失败");
        // return -1;
        exit(EXIT_FAILURE);
    }

    // 打开写文件
    int fd2 = open("love2.txt", O_WRONLY |O_APPEND | O_CREAT, 0664);
    if (fd2 == -1)
    {
        perror("打开写文件失败");
        // 关闭读文件
        close(fd);
        // return -1;
        _exit(EXIT_FAILURE);
    }

    // 边读边写并输出到控制台
    char buf[1024];
    int read_size = 0;
    while((read_size=read(fd, buf, sizeof(buf))) > 0)
    {
        // 写到love2.txt
        write(fd2, buf, read_size);
        // 输出到控制台
        write(STDOUT_FILENO, buf, read_size);
    }

    if (read_size == -1)
    {
        perror("读文件失败");
        // 关闭文件
        close(fd);
        close(fd2);
        return -1;
    }

    // 关闭文件
    close(fd);
    close(fd2);

    // return 0;
    exit(EXIT_SUCCESS); // 内部会自动关闭文件流，但开发一般都会手动关闭文件流
}
